/************************************************************************************************
 * 项目名称：u8g2+oled+stm32 初始化适配库
 * 
 * 功能特点：
 *          本封装库基于U8G2开源OLED显示库,提供标准化的 OLED初始化接口
 *          让开发者能够轻松在不同通信方式(SPI/I2C)和不同OLED屏幕型号
 *          (如SH1106、SSD1306)之间快速切换,大幅降低移植成本
 * 
 * 适用范围：STM32 + U8G2 库的 OLED 屏幕驱动
 * 发布日期：2025-01-30
 * 版本：1.0
 * 作者：Soda                        
 ***********************************************************************************************/

#include "u8g2_oled_init.h"


static U8G2_INIT_CONFIG oled_config_table[] = {
    {OLED_SH1106,SPI_HW,user_u8g2_setup_sh1106_spi_hw},
};

/**
 * @brief u8g2库oled初始化函数
 * @param u8g2 
 * @param com 
 * @param chip 
 */
void u8g2_oled_init(u8g2_t *u8g2,U8G2_COMTYPE com,U8G2_CHIPTYPE chip)
{
    uint8_t num = sizeof(oled_config_table)/sizeof(U8G2_INIT_CONFIG);
    for(uint8_t i = 0;i<num;i++)
    {
        if(oled_config_table[i].chip == chip && oled_config_table[i].com == com)
        {
            oled_config_table[i].u8g2_setup_func(u8g2);
            u8g2_InitDisplay(u8g2); // 根据所选的芯片进行初始化工作，初始化完成后，显示器处于关闭状态
            u8g2_SetPowerSave(u8g2, 0); // 打开显示器
            u8g2_ClearBuffer(u8g2);
            HAL_Delay(1000);
            return;
        }
    }

    //打印错误信息
   printf("Error: Unsupported chip_type %d or comm_type %d\r\n", chip, com);
}

void draw(u8g2_t *u8g2)
{
	u8g2_ClearBuffer(u8g2); 
    u8g2_SetFontMode(u8g2, 1); 
    u8g2_SetFontDirection(u8g2, 0); 
    u8g2_SetFont(u8g2, u8g2_font_inb24_mf);
    u8g2_DrawStr(u8g2, 0, 20, "U");
    
    u8g2_SetFontDirection(u8g2, 1);
    u8g2_SetFont(u8g2, u8g2_font_inb30_mn);
    u8g2_DrawStr(u8g2, 21,8,"8");
        
    u8g2_SetFontDirection(u8g2, 0);
    u8g2_SetFont(u8g2, u8g2_font_inb24_mf);
    u8g2_DrawStr(u8g2, 51,30,"g");
    u8g2_DrawStr(u8g2, 67,30,"\xb2");
    
    u8g2_DrawHLine(u8g2, 2, 35, 47);
    u8g2_DrawHLine(u8g2, 3, 36, 47);
    u8g2_DrawVLine(u8g2, 45, 32, 12);
    u8g2_DrawVLine(u8g2, 46, 33, 12);
  
    u8g2_SetFont(u8g2, u8g2_font_4x6_tr);
    u8g2_DrawStr(u8g2, 1,54,"github.com/olikraus/u8g2");
	
	u8g2_SendBuffer(u8g2);
	HAL_Delay(1000);
}
void u8g2_oled_disptest(void)
{
    draw(&u8g2);
    u8g2_ClearBuffer(&u8g2);
	u8g2_SetFont(&u8g2, u8g2_font_ncenB08_tr); // 字体设置
	u8g2_DrawStr(&u8g2, 5, 20, "dlmu-2025-eleccomp "); // Y = 10
	u8g2_DrawStr(&u8g2, 32, 40, "display-test"); // Y = 10
	u8g2_DrawStr(&u8g2, 32, 60, "succesful"); // Y = 10
	u8g2_SendBuffer(&u8g2);
}
